//go:build ignore

package main

import (
	"encoding/json"
	"fmt"
)

//结构体的字段上还可以额外再加一个属性，用反引号包含的字符串，称之为 Tag，也就是标签。
type Person struct {
	Name string `json:"userName"` //打包成json后，key就会变成 userName
	Age  int    `json:"userAge"`
	Addr string `json:"userAddr,omitempty"`
}

//由于 Person 结构体里的 Addr 字段有 omitempty 属性
//因此 encoding/json 在将对象转化 json 字符串时
//只要发现对象里的 Addr 为 false， 0， 空指针，空接口，空数组，空切片，空映射，空字符串中的一种，就会被忽略。

func main() {
	p1 := Person{
		Name: "jack",
		Age:  33,
	}
	data1, err := json.Marshal(p1) //打包成json
	if err != nil {
		panic(err)
	}

	//这里不能用Println,因为data1 是 []byte 类型
	//p1 没有 Addr，就不会打印
	fmt.Printf("%s\n", data1)

	p2 := Person{
		Name: "Green",
		Addr: "China",
	}

	data2, err := json.Marshal(p2)
	if err != nil {
		panic(err)
	}

	// p2 没有Age，也会打印出0值
	fmt.Printf("%s\n", data2)
}
